package funciones;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */


/**
 *
 * @author Jesus Ruiz Oliva
 */

import AplicacionMVC.Vistas;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Polygon;
import javax.swing.JPanel;
import java.util.*;;


public class Histogram extends JPanel {
      
    private final String meses[]={"E","F","M","A","M","J","J","A","S","O","N","D"};
    private float datos[]={}; //Datos que representa la altura de las barras    
    private Map<String,float[]> map;//HasMap<año,datos mensuales>
    private String select;       
    private int mayor; // El dato mayor de un array de enteros
    private int valoresX[][];// = new int[2][4];
    private int valoresY[][];// = new int[2][4];
    private final int valoresBaseX[][] ={{100,120,125,105},{120,125,125,120}};
    private final int valoresBaseY[][] ={{250,250,245,245},{250,245,245,250}};
    private int[] x = new int[4];
    private int[] y = new int[4];
    private Polygon poligono;
    private Boolean bandera;
    private Vistas ventana;
    
    
   //Constructor para pruebas
    public Histogram() {                  
        //Datoas de prueba
        valoresX = new int[2][4];
        valoresY = new int[2][4];       
        bandera=false;
    }   
    
    public void configurar(Map<String, float[]> hMap, Vistas ventana) {
        this.map = hMap;
        this.ventana = ventana;
    }
   
    public void dibujarHistograma(float[] datos){
        
        this.datos = datos;
        bandera = true;
        repaint();
    }
   
    @Override    
    public void paintComponent(Graphics g)
    {
        super.paintComponent(g);
       
        //Calcula el mayor de los datos
        if(bandera && datos!=null){
            mayor=(int)datos[0];
            ventana.setGastosMeses(datos);
            for(int i=1;i<12;i++){
                if (mayor<(int)datos[i]) mayor=(int)datos[i];
            }
            //Cuadricula
            for(int i = 0; i <= 10; i++){//Lineas horizontales                
                g.drawLine(85, 50+20*i, 455,50+20*i);  
                //Poner valores de cada division
                //g.drawString((new Double(mayor-i*(new Double(mayor)/10))).toString(), 65, 250+20*i);
            }
            g.drawLine(85, 50,85,250); // 2 lineas verticales
            g.drawLine(455, 50,455,250);

            //Barras   
            if (mayor!=0){
                for(int i=0;i<12;i++){                
                    for(int j=0;j<4;j++){
                        //Coordenadas cara superior
                        valoresX[0][j]=valoresBaseX[0][j]+30*i;
                        valoresY[0][j]=valoresBaseY[0][j]-((int)datos[i]*200)/mayor;
                        //Coordenadas cara lateral
                        valoresX[1][j]=valoresBaseX[1][j]+30*i;
                        if (j<2)
                            valoresY[1][j]=valoresBaseY[1][j];
                        else 
                            valoresY[1][j]=valoresBaseY[1][j]-((int)datos[i]*200)/mayor;
                    }
                    //Dibuja cara superior
                    poligono = new Polygon(valoresX[0],valoresY[0],4);
                    g.setColor(new Color(162,208,255));
                    g.fillPolygon(poligono);
                    //Dibuja cara lateral
                    poligono = new Polygon(valoresX[1],valoresY[1],4);
                    g.setColor(new Color(94,174,255));
                    g.fillPolygon(poligono);
                    //Dibuja cara frontal
                    x[0]=100+i*30;x[1]=100+i*30+20;x[2]=100+i*30+20;x[3]=100+i*30;
                    y[0]=250;y[1]=250;y[2]=250-((int)datos[i]*200)/mayor;y[3]=250-((int)datos[i]*200)/mayor;
                    poligono = new Polygon(x,y,4);
                    g.setColor(new Color(0,128,255));
                    g.fillPolygon(poligono);
                    //g.fillRect(100+i*30,250,20,-((int)datos[i]*200)/mayor);
                    g.drawString(meses[i], 100+i*30, 270);
                }           
            }          
        }  
    }    
}